package com.asa.group.fc;

import java.util.ArrayList;
import java.util.List;

import com.asa.shishu.BaseMath;

/**
 * 可约
 * @author asa
 *
 */
public class KeYue {
	
	
	
	
	
	/**
	 * 
	 * 根据高斯引理来的
	 * 
	 * 艾森斯坦判别法（判断一个多项式是否可约）

	如果存在一个素数 p ，对多项式 h(x) 满足下列两个条件，则 h(x) 不可约：

	 p能整除除首项外的每一项系数；
	 p^2不能整除末项（即  ）
	 * 
	 * 
	 * f(x) = a0(x0^0) + a1(x1^1) +... an(xn^n)
	 * 
	 * 
	 * 显然，这里的这个方法是整数域上的
	 * @param a
	 * @return true可约
	 */
	public static boolean yes(int [] a) {
		
		int gcd = BaseMath.GCD(a[0], a[1]);
		
		for (int i = 2; i < a.length-1; i++) {
			
			gcd = BaseMath.GCD(gcd, a[i]);
			
		}
		
		
		if (gcd<2) {
			return true;
		}

		List<Integer> primeCount = BaseMath.primeCount(gcd);
		
		int pre = 0;
		for (int i = 0; i < primeCount.size(); i++) {
			if (i>0) {
				if (primeCount.get(i).equals(pre)) {
					continue;
				}
			}
			
			Integer integer = primeCount.get(i);
			
			int asa = integer*integer;
			
			int w = a[0]%asa;
//			System.out.println(w+"  "+asa);

			if (w!=0) {//p^2不能整除末项
				return false;
			}
			
			
		}
		
		
		
		return true;
	}
	
	
	public static void main(String[] args) {
		
		
//		int[] a = {2,0,1};
		
//		int[] a = {-6,0,1256,0,-20,360,35};

//		int[] a = {1,2,1};
//		int[] a = {1,0,-10,0,1};
		int[] a = {11,-6,1};

		System.out.println(yes(a));
		
		
		
		
	}
	
	

}
